# insert_categories.py
import os
import django

# 配置Django环境（请替换为你的项目settings路径）
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boss_backend.settings')
django.setup()

from category.models import Category  # 替换为实际的模型导入路径


def insert_category_data():
    # 清空现有数据（可选，重复运行需取消注释）
    # Category.objects.all().delete()

    # --------------------------
    # 一级分类（10条，保持不变）
    # --------------------------
    level1_data = [
        {"name": "互联网/AI", "sort_order": 1},
        {"name": "电子/电气/通信", "sort_order": 2},
        {"name": "产品", "sort_order": 3},
        {"name": "客服/运营", "sort_order": 4},
        {"name": "销售", "sort_order": 5},
        {"name": "人力行政/法务", "sort_order": 6},
        {"name": "财务/审计/税务", "sort_order": 7},
        {"name": "生产制造", "sort_order": 8},
        {"name": "零售/生活服务", "sort_order": 9},
        {"name": "餐饮", "sort_order": 10}
    ]

    level1_categories = []
    for data in level1_data:
        cat, created = Category.objects.get_or_create(
            name=data["name"],
            defaults={"level": 1, "parent": None, "sort_order": data["sort_order"]}
        )
        level1_categories.append(cat)
        print(f"{'创建' if created else '已存在'}一级分类: {cat}")

    # 验证一级分类数量
    assert len(level1_categories) == 10, f"一级分类实际数量：{len(level1_categories)}，预期10条"

    # --------------------------
    # 二级分类（60条 = 10个一级 × 每个6条）
    # --------------------------
    # 每个一级分类下新增至6条二级分类，确保分类逻辑关联
    level2_data_map = {
        "互联网/AI": [
            {"name": "技术研发", "sort_order": 1},
            {"name": "算法数据", "sort_order": 2},
            {"name": "技术运维", "sort_order": 3},
            {"name": "人工智能", "sort_order": 4},
            {"name": "大数据", "sort_order": 5},
            {"name": "云计算", "sort_order": 6}
        ],
        "电子/电气/通信": [
            {"name": "硬件开发", "sort_order": 1},
            {"name": "通信工程", "sort_order": 2},
            {"name": "电子设计", "sort_order": 3},
            {"name": "嵌入式开发", "sort_order": 4},
            {"name": "射频工程", "sort_order": 5},
            {"name": "测试测量", "sort_order": 6}
        ],
        "产品": [
            {"name": "产品管理", "sort_order": 1},
            {"name": "产品设计", "sort_order": 2},
            {"name": "用户研究", "sort_order": 3},
            {"name": "产品运营", "sort_order": 4},
            {"name": "原型设计", "sort_order": 5},
            {"name": "需求分析", "sort_order": 6}
        ],
        "客服/运营": [
            {"name": "客户服务", "sort_order": 1},
            {"name": "内容运营", "sort_order": 2},
            {"name": "活动运营", "sort_order": 3},
            {"name": "用户运营", "sort_order": 4},
            {"name": "社群运营", "sort_order": 5},
            {"name": "售后支持", "sort_order": 6}
        ],
        "销售": [
            {"name": "渠道销售", "sort_order": 1},
            {"name": "大客户销售", "sort_order": 2},
            {"name": "销售管理", "sort_order": 3},
            {"name": "售前支持", "sort_order": 4},
            {"name": "电话销售", "sort_order": 5},
            {"name": "区域销售", "sort_order": 6}
        ],
        "人力行政/法务": [
            {"name": "人力资源", "sort_order": 1},
            {"name": "行政后勤", "sort_order": 2},
            {"name": "法务合规", "sort_order": 3},
            {"name": "招聘配置", "sort_order": 4},
            {"name": "薪酬绩效", "sort_order": 5},
            {"name": "员工关系", "sort_order": 6}
        ],
        "财务/审计/税务": [
            {"name": "财务核算", "sort_order": 1},
            {"name": "内部审计", "sort_order": 2},
            {"name": "税务筹划", "sort_order": 3},
            {"name": "成本管理", "sort_order": 4},
            {"name": "财务分析", "sort_order": 5},
            {"name": "资金管理", "sort_order": 6}
        ],
        "生产制造": [
            {"name": "生产管理", "sort_order": 1},
            {"name": "工艺工程", "sort_order": 2},
            {"name": "质量管控", "sort_order": 3},
            {"name": "设备管理", "sort_order": 4},
            {"name": "生产计划", "sort_order": 5},
            {"name": "物料管理", "sort_order": 6}
        ],
        "零售/生活服务": [
            {"name": "门店运营", "sort_order": 1},
            {"name": "客户服务", "sort_order": 2},
            {"name": "供应链管理", "sort_order": 3},
            {"name": "商品管理", "sort_order": 4},
            {"name": "视觉陈列", "sort_order": 5},
            {"name": "促销活动", "sort_order": 6}
        ],
        "餐饮": [
            {"name": "餐厅管理", "sort_order": 1},
            {"name": "后厨运营", "sort_order": 2},
            {"name": "前厅服务", "sort_order": 3},
            {"name": "采购管理", "sort_order": 4},
            {"name": "食品安全", "sort_order": 5},
            {"name": "品牌推广", "sort_order": 6}
        ]
    }

    level2_categories = []
    for level1_name, level2_list in level2_data_map.items():
        # 找到对应的一级分类
        level1_cat = next(c for c in level1_categories if c.name == level1_name)
        for data in level2_list:
            cat, created = Category.objects.get_or_create(
                name=data["name"],
                parent=level1_cat,
                defaults={"level": 2, "sort_order": data["sort_order"]}
            )
            level2_categories.append(cat)
            print(f"{'创建' if created else '已存在'}二级分类: {cat}")

    # 验证二级分类数量（10×6=60条）
    assert len(level2_categories) == 60, f"二级分类实际数量：{len(level2_categories)}，预期60条"

    # --------------------------
    # 三级分类（300条 = 60个二级 × 每个5条，固定分配）
    # --------------------------
    # 每个二级分类对应5条三级分类，确保名称关联性
    level3_data_map = {
        # 互联网/AI 二级分类对应的三级岗位
        "技术研发": ["Java开发工程师", "Python开发工程师", "Golang开发工程师", "C/C++开发工程师", ".NET开发工程师"],
        "算法数据": ["算法工程师", "数据分析师", "数据挖掘工程师", "机器学习工程师", "NLP工程师"],
        "技术运维": ["Linux运维工程师", "云运维工程师", "DevOps工程师", "网络工程师", "数据库管理员"],
        "人工智能": ["AI算法工程师", "计算机视觉工程师", "语音识别工程师", "AI产品经理", "深度学习工程师"],
        "大数据": ["大数据开发工程师", "Hadoop工程师", "Spark工程师", "数据仓库工程师", "实时计算工程师"],
        "云计算": ["云计算工程师", "云架构师", "AWS认证工程师", "阿里云工程师", "容器化工程师"],

        # 电子/电气/通信 二级分类对应的三级岗位
        "硬件开发": ["硬件研发工程师", "嵌入式开发工程师", "电源工程师", "PCB设计工程师", "硬件测试工程师"],
        "通信工程": ["通信工程师", "5G工程师", "网络优化工程师", "基站工程师", "传输工程师"],
        "电子设计": ["模拟电子工程师", "数字电子工程师", "电子元器件工程师", "EDA工程师", "电磁兼容工程师"],
        "嵌入式开发": ["嵌入式软件工程师", "嵌入式硬件工程师", "MCU开发工程师", "Linux嵌入式工程师", "RTOS开发工程师"],
        "射频工程": ["射频工程师", "天线工程师", "微波工程师", "射频测试工程师", "无线通信工程师"],
        "测试测量": ["测试工程师", "仪器校准工程师", "射频测试工程师", "硬件测试工程师", "可靠性测试工程师"],

        # 产品 二级分类对应的三级岗位
        "产品管理": ["产品经理", "高级产品经理", "B端产品经理", "C端产品经理", "产品负责人"],
        "产品设计": ["UI设计师", "UX设计师", "视觉设计师", "交互设计师", "动效设计师"],
        "用户研究": ["用户研究员", "可用性测试工程师", "市场研究员", "用户体验分析师", "定性研究专员"],
        "产品运营": ["产品运营专员", "用户增长专员", "产品数据分析师", "功能运营专员", "产品活动策划"],
        "原型设计": ["原型设计师", "交互原型师", "产品原型专员", "Axure设计师", "原型测试专员"],
        "需求分析": ["需求分析师", "业务分析师", "系统分析师", "需求挖掘专员", "需求管理专员"],

        # 客服/运营 二级分类对应的三级岗位
        "客服服务": ["在线客服专员", "电话客服专员", "售后客服主管", "投诉处理专员", "客服培训师"],
        "内容运营": ["内容编辑", "新媒体运营", "文案策划", "短视频运营", "图文设计专员"],
        "活动运营": ["活动策划专员", "活动执行专员", "推广运营专员", "用户增长专员", "活动数据分析"],
        "用户运营": ["用户运营专员", "会员运营专员", "用户生命周期运营", "社群运营专员", "用户留存专员"],
        "社群运营": ["社群管理员", "KOL运营专员", "社群活动策划", "社群内容运营", "用户社群专员"],
        "售后支持": ["售后工程师", "技术支持专员", "售后客服专员", "维修工程师", "售后主管"],

        # 销售 二级分类对应的三级岗位
        "渠道销售": ["渠道经理", "区域销售代表", "经销商管理专员", "渠道拓展专员", "渠道销售助理"],
        "大客户销售": ["大客户经理", "企业销售代表", "解决方案顾问", "销售总监", "大客户助理"],
        "销售管理": ["销售经理", "销售总监", "销售运营专员", "销售培训师", "销售数据分析"],
        "售前支持": ["售前工程师", "解决方案顾问", "技术售前专员", "产品售前专员", "售前方案设计师"],
        "电话销售": ["电话销售专员", "销售代表", "电话营销专员", "客户开发专员", "电话客服销售"],
        "区域销售": ["区域销售经理", "区域销售代表", "地区客户经理", "区域拓展专员", "区域销售助理"],

        # 人力行政/法务 二级分类对应的三级岗位
        "人力资源": ["人力资源专员", "HR经理", "HRBP", "人力资源总监", "人力资源顾问"],
        "行政后勤": ["行政专员", "前台接待", "办公采购专员", "会议组织专员", "固定资产管理员"],
        "法务合规": ["法务专员", "合同管理专员", "知识产权专员", "合规专员", "律师"],
        "招聘配置": ["招聘专员", "招聘经理", "猎头顾问", "校园招聘专员", "社招专员"],
        "薪酬绩效": ["薪酬专员", "绩效专员", "薪酬绩效经理", "社保公积金专员", "薪酬福利专员"],
        "员工关系": ["员工关系专员", "企业文化专员", "员工培训专员", "劳动关系专员", "员工关怀专员"],

        # 财务/审计/税务 二级分类对应的三级岗位
        "财务核算": ["会计专员", "出纳", "总账会计", "成本会计", "财务助理"],
        "内部审计": ["审计专员", "内部审计师", "审计主管", "合规审计专员", "财务审计专员"],
        "税务筹划": ["税务专员", "税务会计", "税务经理", "税收筹划顾问", "个税专员"],
        "成本管理": ["成本会计", "成本分析师", "成本控制专员", "费用管理专员", "成本核算专员"],
        "财务分析": ["财务分析师", "经营分析师", "预算分析师", "财务数据分析师", "管理分析师"],
        "资金管理": ["资金专员", "资金经理", "融资专员", "现金流管理专员", "资金结算专员"],

        # 生产制造 二级分类对应的三级岗位
        "生产管理": ["生产经理", "车间主任", "生产计划专员", "生产调度员", "产能规划专员"],
        "工艺工程": ["工艺工程师", "制程工程师", "IE工程师", "工艺规划专员", "工艺改进工程师"],
        "质量管控": ["质量工程师", "质检专员", "QC主管", "质量体系专员", "来料检验专员"],
        "设备管理": ["设备工程师", "设备维修专员", "设备管理专员", "自动化设备工程师", "设备采购专员"],
        "生产计划": ["生产计划专员", "物料需求计划专员", "生产排程专员", "产能规划专员", "生产统计专员"],
        "物料管理": ["物料专员", "仓储管理员", "采购专员", "库存管理专员", "物料计划专员"],

        # 零售/生活服务 二级分类对应的三级岗位
        "门店运营": ["门店经理", "店长助理", "门店督导", "运营专员", "门店陈列专员"],
        "客户服务": ["零售客服专员", "会员服务专员", "客户投诉处理", "门店客服主管", "服务质量专员"],
        "供应链管理": ["采购专员", "仓储管理员", "物流专员", "库存管理专员", "供应链规划专员"],
        "商品管理": ["商品专员", "商品采购专员", "商品规划专员", "商品定价专员", "商品陈列专员"],
        "视觉陈列": ["视觉陈列师", "门店陈列专员", "橱窗设计师", "陈列督导", "视觉营销专员"],
        "促销活动": ["促销专员", "活动策划专员", "促销执行专员", "导购培训专员", "促销数据分析"],

        # 餐饮 二级分类对应的三级岗位
        "餐厅管理": ["餐厅经理", "副店长", "区域督导", "餐厅运营专员", "餐厅培训师"],
        "后厨运营": ["厨师长", "主厨", "凉菜厨师", "热菜厨师", "面点师"],
        "前厅服务": ["前厅主管", "服务员", "收银员", "迎宾员", "包厢服务员"],
        "采购管理": ["餐饮采购专员", "食材采购经理", "供应商管理专员", "采购验收专员", "食材成本专员"],
        "食品安全": ["食品安全专员", "食材检验员", "卫生管理员", "食品安全督导", "食材储存管理"],
        "品牌推广": ["餐饮品牌专员", "营销策划专员", "线上推广专员", "线下活动专员", "品牌文案专员"]
    }

    level3_count = 0
    for level2_cat in level2_categories:
        level2_name = level2_cat.name
        # 获取当前二级分类对应的5条三级分类名称
        level3_names = level3_data_map.get(level2_name, [f"{level2_name}三级岗位{idx + 1}" for idx in range(5)])

        # 确保每个二级分类下正好5条三级分类
        assert len(level3_names) == 5, f"二级分类「{level2_name}」对应的三级分类数量不是5条"

        for idx, name in enumerate(level3_names, 1):
            cat, created = Category.objects.get_or_create(
                name=name,
                parent=level2_cat,
                defaults={"level": 3, "sort_order": idx}
            )
            if created:
                level3_count += 1
                print(f"创建三级分类: {cat}")
            else:
                print(f"三级分类已存在: {cat}")

    # 验证三级分类总数量（60×5=300条）
    actual_level3_count = Category.objects.filter(level=3).count()
    assert actual_level3_count == 300, f"三级分类实际数量：{actual_level3_count}，预期300条"

    print("\n" + "=" * 60)
    print("数据插入完成！最终统计：")
    print(f"一级分类: {Category.objects.filter(level=1).count()} 条（预期10条）")
    print(f"二级分类: {Category.objects.filter(level=2).count()} 条（预期60条）")
    print(f"三级分类: {actual_level3_count} 条（预期300条）")
    print(f"分配规则：每个一级分类6条二级，每个二级分类5条三级")
    print("=" * 60)


if __name__ == "__main__":
    insert_category_data()